home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / c / EGCSWOSAlib.lha / src.lha / CreatePort.c < prev    next >
C/C++ Source or Header  |  1999-01-04  |  1KB  |  61 lines

  1. /*
  2. ** amiga.lib for vbcc-PowerOpen/WarpOS
  3. **
  4. ** CreatePort(), DeletePort()
  5. **
  6. ** V0.2 19-Apr-98 phx
  7. **      replaced <clib/powerpc/powerpc_protos.h> by <clib/powerpc_protos.h>
  8. **      AllocVecPPC() returns APTR, so a cast is needed
  9. ** V0.1 15-Mar-98 phx
  10. **      created
  11. */
  12.  
  13. #include <exec/ports.h>
  14. #include <exec/memory.h>
  15. #include <clib/alib_protos.h>
  16. #include <proto/exec.h>
  17. #include <powerpc/powerpc_protos.h>
  18.  
  19.  
  20. struct MsgPort *CreatePort(STRPTR name,LONG pri)
  21. {
  22.   struct MsgPort *port;
  23.   UBYTE portsig;
  24.  
  25.   if ((BYTE)(portsig=AllocSignal(-1)) < 0)
  26.     return NULL;
  27.   if (!(port = (struct MsgPort *)
  28.         AllocVecPPC(sizeof(struct MsgPort),MEMF_CLEAR|MEMF_PUBLIC,0)))
  29.     FreeSignal(portsig);
  30.   else
  31.   {
  32.     port->mp_Node.ln_Type=NT_MSGPORT;
  33.     port->mp_Node.ln_Pri=pri;
  34.     port->mp_Node.ln_Name=name;
  35.     /* done via AllocMem
  36.     port->mp_Flags=PA_SIGNAL;
  37.     */
  38.     port->mp_SigBit=portsig;
  39.     port->mp_SigTask=FindTask(NULL);
  40.     if (port->mp_Node.ln_Name)
  41.       AddPort(port);
  42.     else
  43.       NewList(&port->mp_MsgList);
  44.   }
  45.   return port;
  46. }
  47.  
  48.  
  49. void DeletePort(struct MsgPort *port)
  50. {
  51.    int i;
  52.  
  53.    if (port->mp_Node.ln_Name != NULL)
  54.      RemPort(port);
  55.    i=-1;
  56.    port->mp_Node.ln_Type=i;
  57.    port->mp_MsgList.lh_Head=(struct Node *)i;
  58.    FreeSignal(port->mp_SigBit);
  59.    FreeVecPPC((APTR)port);
  60. }
  61.